﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EasyNet.Componets.Core.Http
{
    /// <summary>
    /// 表示 Authorization、ProxyAuthorization、WWW-Authneticate 和 Proxy-Authenticate 标头值中的验证信息。
    /// </summary>
    public class RequestAuthenticationHeaderValue
    {
        //
        // 摘要:
        //     初始化 System.Net.Http.Headers.AuthenticationHeaderValue 类的新实例。
        //
        // 参数:
        //   scheme:
        //     用于授权的架构。
        //
        //   parameter:
        //     包含请求资源的用户代理的身份验证消息的凭证。
        public RequestAuthenticationHeaderValue(string scheme, string parameter)
        {
            this.Scheme = scheme;
            this.Parameter = parameter;
        }

        //
        // 摘要:
        //     获取用于身份验证的方案。
        //
        // 返回结果:
        //     返回 System.String。 用于授权的架构。
        public string Scheme { get; private set; }
        //
        // 摘要:
        //     获取包含所请求资源的用户代理的身份验证信息的凭据。
        //
        // 返回结果:
        //     返回 System.String。 凭证包含身份验证信息。
        public string Parameter { get; private set; }


        //
        // 摘要:
        //     将字符串转换为 System.Net.Http.Headers.AuthenticationHeaderValue 实例。
        //
        // 参数:
        //   input:
        //     一个字符串，表示认证标头值信息。
        //
        // 返回结果:
        //     返回 System.Net.Http.Headers.AuthenticationHeaderValue。 一个 System.Net.Http.Headers.AuthenticationHeaderValue
        //     实例。
        //
        // 异常:
        //   T:System.ArgumentNullException:
        //     input 为 null 引用。
        //
        //   T:System.FormatException:
        //     input 是无效的身份验证标头值信息。
        public static RequestAuthenticationHeaderValue Parse(string input)
        {
            string scheme = string.Empty;
            string parameter = string.Empty;
            if (!string.IsNullOrWhiteSpace(input))
            {
                var arr = input.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

                if (arr.Length >= 1)
                {
                    scheme = arr[0];
                }
                if (arr.Length >= 2)
                {
                    parameter = arr[1];
                }
            }

            return new RequestAuthenticationHeaderValue(scheme, parameter);

        }

    }
}
